/*****************************************************************************************
**  Author:COCO 2022
*****************************************************************************************/
//此js文件是用来自定义扩展业务代码，可以扩展一些自定义页面或者重新配置生成的代码

let extension = {
  components: {
    //查询界面扩展组件
    gridHeader: '',
    gridBody: '',
    gridFooter: '',
    //新建、编辑弹出框扩展组件
    modelHeader: '',
    modelBody: '',
    modelFooter: ''
  },
  tableAction: '', //指定某张表的权限(这里填写表名,默认不用填写)
  buttons: { view: [], box: [], detail: [] }, //扩展的按钮
  methods: {
     //下面这些方法可以保留也可以删除
    onInit() {  //框架初始化配置前
        //示例：设置修改新建、编辑弹出框字段标签的长度
        this.boxOptions.labelWidth = 120;
        //设置查询表单的标签文字宽度
        this.labelWidth = 120;
        //显示序号(默认隐藏)
        this.columnIndex = true;
        
        // 配置文件和图片上传
        this.editFormOptions.forEach(item => {
            item.forEach(x => {
                // 配置附件上传
                if (x.field == "Attachment") {
                    x.type = "file";
                    x.url = this.http.ipAddress + "api/Basicdata_defectitem/Upload";
                    x.maxSize = 5; // 最大5MB
                    x.multiple = true; // 允许多文件上传
                    x.autoUpload = true; // 自动上传
                }
                
                // 配置图片上传
                if (x.field == "ImageUrl") {
                    x.type = "img";
                    x.url = this.http.ipAddress + "api/Basicdata_defectitem/Upload";
                    x.maxSize = 3; // 最大3MB
                    x.multiple = true; // 允许多图片上传
                    x.autoUpload = true; // 自动上传
                }
                
                // 如果是编号字段，设置提示信息
                if (x.field == "DefectItemCode") {
                    x.placeholder = "";
                }
            });
        });

        // 设置附件超链接点击事件
        this.columns.forEach(column => {
            if (column.field === 'Attachment') {
                // 移除文件类型，让formatter生效
                column.type = null;
                
                column.formatter = (row) => {
                    if (!row.Attachment) return '';
                    // 返回一个可点击的链接，带文件名显示
                    let fileNames = row.Attachment.split(',');
                    if (fileNames.length === 0) return '';
                    
                    let displayName = fileNames[0].split('/').pop(); // 获取文件名
                    if (fileNames.length > 1) {
                        displayName += ` 等${fileNames.length}个附件`;
                    }
                    
                    return `<a class="file-link" style="color:blue;cursor:pointer;text-decoration:underline;" data-files="${row.Attachment}">${displayName}</a>`;
                };
                
                // 设置点击事件
                column.click = (row, column, event) => {
                    // 阻止事件冒泡，防止触发行的编辑跳转
                    event.stopPropagation();
                    
                    // 检查点击的是否是链接元素
                    let target = event.target;
                    if (target.className === 'file-link') {
                        let files = target.getAttribute('data-files');
                        if (files) {
                            this.openAttachments(files);
                        }
                    }
                };
            }
        });
    },
    openAttachments(fileUrls) {
        // 分割多个文件URL
        let urls = fileUrls.split(',');
        if (urls.length === 0) return;
        
        // 创建一个新页面显示附件内容
        let html = '<html><head><title>附件查看</title>';
        html += '<style>body{font-family:Arial,sans-serif;margin:20px;} .file-container{margin-bottom:20px;border:1px solid #ddd;padding:15px;border-radius:4px;} h2{color:#2c3e50;} .preview{max-width:100%;margin-top:10px;}</style>';
        html += '</head><body><h1>附件列表</h1>';
        
        urls.forEach((url, index) => {
            let fileName = url.split('/').pop();
            let fileExt = fileName.split('.').pop().toLowerCase();
            
            html += `<div class="file-container">
                <h2>附件 ${index + 1}: ${fileName}</h2>`;
                
            // 根据文件类型显示不同的预览或下载链接
            if (['jpg', 'jpeg', 'png', 'gif'].includes(fileExt)) {
                html += `<img src="${this.http.ipAddress + url}" class="preview" />`;
            } else if (['pdf'].includes(fileExt)) {
                html += `<iframe src="${this.http.ipAddress + url}" width="100%" height="500px"></iframe>`;
            } else if (['mp4', 'webm', 'ogg'].includes(fileExt)) {
                html += `<video controls width="100%"><source src="${this.http.ipAddress + url}" type="video/${fileExt}"></video>`;
            } else if (['mp3', 'wav'].includes(fileExt)) {
                html += `<audio controls><source src="${this.http.ipAddress + url}" type="audio/${fileExt}"></audio>`;
            }
            
            html += `<p><a href="${this.http.ipAddress + url}" target="_blank" download="${fileName}">下载文件</a></p>
                </div>`;
        });
        
        html += '</body></html>';
        
        // 打开新窗口显示附件
        let newWindow = window.open('', '_blank');
        newWindow.document.write(html);
        newWindow.document.close();
    },
    onInited() {
      //框架初始化配置后
      //如果要配置明细表,在此方法操作
      //this.detailOptions.columns.forEach(column=>{ });
    },
    searchBefore(param) {
      //界面查询前,可以给param.wheres添加查询参数
      //返回false，则不会执行查询
      return true;
    },
    searchAfter(result) {
      //查询后，result返回的查询数据,可以在显示到表格前处理表格的值
      return true;
    },
    addBefore(formData) {
      //新建保存前formData为对象，包括明细表，可以给给表单设置值，自己输出看formData的值
      return true;
    },
    updateBefore(formData) {
      //编辑保存前formData为对象，包括明细表、删除行的Id
      return true;
    },
    rowClick({ row, column, event }) {
      //查询界面点击行事件
      // this.$refs.table.$refs.table.toggleRowSelection(row); //单击行时选中当前行;
    },
    modelOpenAfter(row) {
      //点击编辑、新建按钮弹出框后，可以在此处写逻辑，如，从后台获取数据
      //(1)判断是编辑还是新建操作： this.currentAction=='Add';
      //(2)给弹出框设置默认值
      //(3)this.editFormFields.字段='xxx';
    }
  }
};
export default extension; 